{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "X = [[60], [140], [210], [380], [860]]\n",
    "y = [[42], [91], [96], [240], [420]]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "%matplotlib inline\n",
    "import matplotlib.pyplot as plt\n",
    "from matplotlib.font_manager import FontProperties\n",
    "#font = FontProperties(fname=r\"c:\\windows\\fonts\\msyh.ttc\", size=10)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n+maeowAAAABJRU5ErkJggg==\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x11b4bfd30>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "def generateplt():\n",
    "    plt.figure()\n",
    "    plt.title('高铁价格与里程数据')#,fontproperties=font)\n",
    "    plt.xlabel('里程（公里）')#,fontproperties=font)\n",
    "    plt.ylabel('价格（人民币元）')#,fontproperties=font)\n",
    "    plt.axis([0, 1000, 0, 500])\n",
    "    plt.grid(True)\n",
    "    return plt\n",
    "\n",
    "plt = generateplt()\n",
    "plt.plot(X, y, 'k.')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "from sklearn.linear_model import LinearRegression"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "预测一张600公里里程的高铁票的价格：￥307\n",
      "预测一张600公里里程的高铁票的价格：￥364\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/anaconda/lib/python3.6/site-packages/sklearn/utils/validation.py:395: DeprecationWarning: Passing 1d arrays as data is deprecated in 0.17 and will raise ValueError in 0.19. Reshape your data either using X.reshape(-1, 1) if your data has a single feature or X.reshape(1, -1) if it contains a single sample.\n",
      "  DeprecationWarning)\n",
      "/anaconda/lib/python3.6/site-packages/sklearn/utils/validation.py:395: DeprecationWarning: Passing 1d arrays as data is deprecated in 0.17 and will raise ValueError in 0.19. Reshape your data either using X.reshape(-1, 1) if your data has a single feature or X.reshape(1, -1) if it contains a single sample.\n",
      "  DeprecationWarning)\n"
     ]
    }
   ],
   "source": [
    "# 创建并拟合模型\n",
    "model = LinearRegression()\n",
    "model.fit(X, y)\n",
    "print('预测一张600公里里程的高铁票的价格：￥%.0f' % model.predict([600])[0])\n",
    "print('预测一张600公里里程的高铁票的价格：￥%.0f' % model.predict([720])[0])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x11d9e9518>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt = generateplt()\n",
    "plt.plot(X, y, 'k.')\n",
    "X2 = [[180], [360], [600], [720], [850]]\n",
    "\n",
    "y2 = model.predict(X2)\n",
    "plt.plot(X, y, 'k.')\n",
    "plt.plot(X2, y2, 'g-')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\nYII=\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x11da01f60>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "\n",
    "plt = generateplt()\n",
    "plt.plot(X, y, 'k.')\n",
    "X2 = [[60], [140], [210], [380], [860]]\n",
    "model = LinearRegression()\n",
    "model.fit(X, y)\n",
    "y2 = model.predict(X2)\n",
    "plt.plot(X, y, 'k.')\n",
    "plt.plot(X2, y2, 'g-')\n",
    "# 残差预测值\n",
    "yr = model.predict(X)\n",
    "for idx, x in enumerate(X):\n",
    "    plt.plot([x, x], [y[idx], yr[idx]], 'r-')\n",
    "    \n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "101700.0\n"
     ]
    }
   ],
   "source": [
    "# 如果是Python2，加from __future__ import division\n",
    "xbar = (60 + 140 + 210 + 380 + 860) / 5\n",
    "variance = ((60 - xbar)**2 + (140 - xbar)**2 + (210 - xbar)**2 + (380 - xbar)**2 + (860 - xbar)**2) / 4\n",
    "print(variance)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "import numpy as np"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "101700.0\n"
     ]
    }
   ],
   "source": [
    "print(np.var([60, 140, 210, 380, 860], ddof=1))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 32,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "40890.0\n"
     ]
    }
   ],
   "source": [
    "ybar = (42 + 72 + 96 + 186 + 360) / 5\n",
    "cov = ((60 - xbar) * (42 - ybar) + (140 - xbar) * (72 - ybar) + (210 - xbar) *(96 - ybar) + (380 - xbar)* (186 - ybar) + (860 - xbar) * (360 - ybar)) / 4\n",
    "print(cov)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 33,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "40890.0\n"
     ]
    }
   ],
   "source": [
    "print(np.cov([60, 140, 210, 380, 860], [42, 72, 96, 186, 360])[0][1])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 34,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0.4020648967551622\n"
     ]
    }
   ],
   "source": [
    "b = cov / variance\n",
    "print(b)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "a = ybar - b*xbar"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 35,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "18.518584070796464\n"
     ]
    }
   ],
   "source": [
    "a = ybar - b * xbar\n",
    "print(a)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "y = 18.5 + 0.4*x"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 36,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "一张180公里里程的高铁票的价格：￥91\n",
      "一张320公里里程的高铁票的价格：￥147\n"
     ]
    }
   ],
   "source": [
    "price1 = a + b * 180\n",
    "price2 = a + b * 320\n",
    "print('一张180公里里程的高铁票的价格：￥%.0f' % price1)\n",
    "print('一张320公里里程的高铁票的价格：￥%.0f' % price2)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 38,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "95656.0\n"
     ]
    }
   ],
   "source": [
    "mean = (40 + 116 + 175 + 306 + 428) / 5\n",
    "SStot = (40 - mean)*(40 - mean) + (116 - mean)*(116 - mean) + (175 - mean)*(175 - mean) + (306 - mean)*(306 - mean) + (428 - mean)*(428 - mean)\n",
    "print(SStot)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 39,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "5770\n"
     ]
    }
   ],
   "source": [
    "SSres = (40-54)*(40-54) + (116-121)*(116-121) + (175-173)*(175-173) + (360-291)*(360-291) + (428-400)*(428-400)\n",
    "print(SSres)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 40,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0.9396796855398512\n"
     ]
    }
   ],
   "source": [
    "R2 = 1- SSres / SStot\n",
    "print(R2)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 42,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.97636589465605261"
      ]
     },
     "execution_count": 42,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 测试集\n",
    "#X_test = [[88], [256], [384], [678], [950]]\n",
    "#y_test = [[40], [116], [175], [306], [428]]\n",
    "#model = LinearRegression()\n",
    "#model.fit(X, y)\n",
    "#thisY = model.predict(X_test)\n",
    "#print(thisY)\n",
    "model.score(X, y)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.1"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
